package com.hy.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hy.common.Result;
import com.hy.dto.user.UserDTO;
import com.hy.dto.wechatDto.WechatLoginDto;
import com.hy.entity.User;
import com.hy.entity.vo.GenderStatisticsVO;
import com.hy.entity.vo.UserVO;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;


@Service
public interface UserService extends IService<User> {

    /**
     * 扣除用户积分
     * @param userId 用户ID
     * @param points 扣除的积分
     * @return 是否成功
     */
    boolean reducePoints(Long userId, Integer points);

    /**
     * 增加用户积分
     * @param userId 用户ID
     * @param points 增加的积分
     * @return 是否成功
     */
    boolean addPoints(Long userId, Integer points);

    /**
     * 根据openid获取用户
     * @param openid 微信openid
     * @return 用户
     */
    User getByOpenid(String openid);

    Map<String, Object> weChatLogin(WechatLoginDto request);

    /**
     * 导出会员导入模板
     * @param response HTTP响应对象
     */
    void exportMemberTemplate(HttpServletResponse response) throws IOException;
    /**
     * 导入会员Excel文件
     * @param file 上传的Excel文件
     * @throws Exception 文件处理异常
     */
    void importMembers(MultipartFile file) throws Exception;

    /**
     * 添加会员
     * @param userDTO 会员信息
     */
    void addMember(UserDTO userDTO);

    /**
     * 删除会员
     * @param id 会员ID
     */
    void deleteMember(Integer id);

    /**
     * 更新会员信息
     * @param userDTO 会员信息
     */
    void updateMember(UserDTO userDTO);

    /**
     * 根据ID获取会员信息
     * @param id 会员ID
     * @return 会员视图对象
     */
    UserVO getMemberById(Integer id);

    /**
     * 分页查询会员列表
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param name 姓名（可选，用于搜索）
     * @param phone 手机号（可选，用于搜索）
     * @return 分页结果
     */
    Page<UserVO> listMembers(Integer pageNum, Integer pageSize, String name, String phone);
    public GenderStatisticsVO getGenderStatistics();
    public List<User> getAllUsers();

    //修改当前登录用户信息
    Result<User> updateUserinfo(User user);

}
